﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Runtime.Serialization;
using ddcCajamarca.BusinessEntities.Post;
using ddcCajamarca.Repository.Post.Service;

namespace ddcCajamarca.Repository.Post
{
    public class NotaInformativaRepository:MasterRepository,INotaInformativaRepository
    {
        public IEnumerable<NotaInformativa> SelectAllNotaInformativaByEvento(int id)
        {
            var query = from e in Context.NotasInformativas
                        where e.EventoId.Equals(id)
                        select e ;
                
            return query.ToList();
        }
        public IEnumerable<NotaInformativa> SelectAllNotaInformativa()
        {
            var query = from e in Context.NotasInformativas
                        select e;
            
            return query.OrderByDescending(x => x.id).Take(4).ToList();
        }

        public NotaInformativa SelectNotaInformativaById(int id)
        {
            return Context.NotasInformativas.Find(id);
        }

        public void EditNotaInformativa(NotaInformativa nota)
        {
            Context.Entry(nota).State = EntityState.Modified;
            Context.SaveChanges();
        }

        public void AddNotaInformativa(NotaInformativa nota)
        {
            Context.NotasInformativas.Add(nota);
            Context.SaveChanges();
        }

        public void DeleteNotaInformativa(int id)
        {
            var existe = Context.NotasInformativas.Find(id);

            if (existe != null)
            {
                Context.NotasInformativas.Remove(existe);
                Context.SaveChanges();
            }
        }


        public IEnumerable<NotaInformativa> SelectAllNotaInformativaByCriterioAndFechas(string criterio, DateTime? fechInicio, DateTime? fechFin)
        {
            //obtengo todas las Notas informativas
            var query = from n in Context.NotasInformativas
                        .Include("evento")
                        select n;

            //filtro por Evento
            if (!string.IsNullOrEmpty(criterio))
            {
                query = from n in query
                        where n.Titulo.ToUpper().Contains(criterio.ToUpper())
                        select n;
            }

            //filtro por rango de fechas ingresado
            if (fechInicio.HasValue && fechFin.HasValue)
            {
                fechInicio = DateTime.Parse(fechInicio.Value.ToShortDateString() + " 00:00:00");
                fechFin = DateTime.Parse(fechFin.Value.ToShortDateString() + " 23:59:59");

                query = from n in query
                        where n.Fecha >= fechInicio && n.Fecha <= fechFin
                        select n;
            }

            return query.ToList();
        }
    }
}
